package com.cskaoyan.javase.array._5operation._0traverse;

import java.util.Arrays;

/**
 * 手写遍历数组可以使用for循环,也可以使用增强for循环
 * 增强for循环（也叫foreach），以遍历并打印数组元素为例，它的语法是：
 * for(数据类型 变量名 : 要遍历的数组或者集合){
 *   System.out.println(变量名);
 * }
 *
 * 语法中的各个部分：
 *      1.数据类型是要遍历数组或集合中元素的数据类型。
 *          比如遍历int数组，就应该填入int。
 *      2.从整个遍历的过程中看来，变量名就表示数组/集合中的某一个元素。
 *          在遍历的整体就代表所有元素。
 *
 *
 * 增强for vs 普通for
 * 区别:
 *      1.普通for遍历的是数组的下标,但是增强for直接遍历数组的元素
 * 增强for的优点:
 *      2.增强for的语法会稍微简单一点,尤其是配合快捷键"iter"使用非常快捷
 *      3.增强for由于底层的设计,它的遍历效率会稍微高一点
 * 增强for的缺点:
 *      4.增强for也叫迭代器（iterator），它仅仅作为一个遍历数组/集合的工具而存在， 在增强for当中是不能修改任何元素的取值的。
 *      只能访问,只能读,不能写,不能改
 *
 * 总结一下:
 *      1.如果能够用增强for,就优先选择增强for,除非是以下场景:
 *          a.想要修改元素取值的时候
 *          b.想要获取数组的下标时
 *      2.普通for肯定是都可以用的
 *
 * @since 09:39
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo3 {
    public static void main(String[] args) {
        double[] arr = {0.1, 12, 100};
        // 'for' loop replaceable with 'foreach'
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        for (double element : arr) {
            // element是循环中的局部变量
            System.out.println(element);
        }
        for (double element : arr) {
            // element是容器中的某一个元素,从头开始遍历
            System.out.println(element);
        }

        int[] ints = {666, 66, 6};
        // 使用循环,将数组中的元素都除以6
        // 普通for当中是可以对数组元素进行操作的
        /*for (int i = 0; i < ints.length; i++) {
            ints[i] = ints[i] / 6;
        }
        System.out.println(Arrays.toString(ints));*/

        for (int ele : ints) {
            ele /= 6;
        }
        System.out.println(Arrays.toString(ints));
    }
}
